package com.kun.companion.core.http;

import okhttp3.Request;
import okhttp3.Response;

/**
 * HTTP插件接口（责任链模式），用于实现请求/响应处理链
 *
 * <p>实现建议：
 * 1. 若需修改请求/响应，应创建新对象而非修改原对象
 * 2. 插件执行顺序与注册顺序一致
 * 3. onError中避免阻塞操作
 *
 * @author gzc
 */
public interface HttpPlugin {
    /**
     * 请求预处理（可修改请求头/体）
     * @param request 原始请求对象
     * @return 修改后的请求对象，默认不修改
     */
    default Request preProcess(Request request) {
        return request;
    }

    /**
     * 响应后处理（可解析加密响应等）
     * @param response 原始响应对象
     * @return 修改后的响应对象，默认不修改
     */
    default Response postProcess(Response response) {
        return response;
    }

    /**
     * 异常处理（记录日志/统计等）
     * @param request 失败的请求对象
     * @param e 发生的异常实例
     */
    default void onError(Request request, Exception e) {
    }
}
